#include "bsp_key.h"

bsp_key_t key;

/**
 * @brief  ɨ�谴��״̬
 * @retval uint8_t ����״̬��0��ʾδ���£�1��ʾ����
 */
uint8_t bsp_key_scan(void)
{
		return HAL_GPIO_ReadPin(KEY_GPIO_Port,KEY_Pin);
}

/**
 * @brief  ��ʼ�������ṹ��
 * @param  key ָ�򰴼��ṹ���ָ��
 * @retval void
 */
void bsp_key_init(bsp_key_t *key)
{
    key->event = KEY_EVENT_NONE;
    key->key_cnt = 0;
    key->key_tic_cnt1 = 0;
    key->key_tic_cnt2 = 0;
    key->key_val_old = 1; // Ĭ�ϰ���δ����״̬
    key->read = bsp_key_scan;
}

/**
 * @brief  ����������������ⰴ���¼��簴�¡��ͷš�������˫��
 * @param  key ָ�򰴼��ṹ���ָ��
 * @retval void
 */
void bsp_key_proc(bsp_key_t *key)
{
    key->key_val = key->read();

    // ���°���״̬
    if (key->key_val != key->key_val_old)
    {
        key->key_val_old = key->key_val;
				key->key_status = 1;
        // ��������
        if (key->key_val == 0)
        {
            key->event = KEY_EVENT_PRESS;
            key->key_cnt++;
            key->key_tic_cnt1 = 0; // ���ü�ʱ��
        }
        // �����ͷ�
        else
        {
            // �������ʱ��϶̣��ж�Ϊ�̰�
            if (key->key_tic_cnt1 < KEY_LONG_PRESS_TIME_MS && key->key_tic_cnt1 >= 50)
            {
                // ����ǵ�һ�ΰ��£��ȴ����ܵ�˫��
                if (key->key_cnt == 1)
                {
                    key->key_tic_cnt2 = 0; // ����˫����ʱ��
                }
                // ����ǵڶ��ΰ��£�����˫���¼�
                else if (key->key_cnt == 2)
                {
                    key->event = KEY_EVENT_DOUBLE_CLICK;
                    key->key_cnt = 0;
                    key->key_tic_cnt2 = 0;
                }
            }
            key->key_tic_cnt1 = 0; // ���ð�ѹ��ʱ��
        }
    }
    // ����״̬δ�仯
    else
    {
				key->key_status = 0;	
        // ��������״̬
        if (key->key_val == 0)
        {
            key->key_tic_cnt1 += KEY_SCAN_TIC;
            // �������
            if (key->key_tic_cnt1 >= KEY_LONG_PRESS_TIME_MS)
            {
                key->event = KEY_EVENT_LONG_PRESS;
                // ��ֹ�ظ����������¼�
                key->key_tic_cnt1 = KEY_LONG_PRESS_TIME_MS - 100;
            }
        }
        // �����ͷ�״̬
        else
        {
            // ���֮ǰ�а������¼�����˵���ڵȴ�˫��
            if (key->key_cnt > 0)
            {
                key->key_tic_cnt2 += KEY_SCAN_TIC;
                // ����˫���ȴ�ʱ�䣬�ж�Ϊ����
                if (key->key_tic_cnt2 >= KEY_DOUBLE_CLICK_TIME_MS)
                {
                    // ֻ��һ�ΰ�����¼��˵���ǵ���
                    if (key->key_cnt == 1)
                    {
                        // �̰��¼��Ѿ��ڰ����ͷ�ʱ���������ﲻ��Ҫ�ٴδ���
                    }
                    key->key_cnt = 0;
                    key->key_tic_cnt2 = 0;
                }
            }
        }
    }
}